package main.java.design.command;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 是请求的发送者，它通常拥有很多的命令对象，并通过访问命令对象来执行相关请求，它不直接访问接收者。
 * </p>
 *
 * @author : wangdejian
 * @version 1.0
 * @date : 2020/6/18 22:31
 */
public class WaiterRevoker {

    // 通过有很多命令对象(夏天点烧烤的客户有好多桌)
    private List<Command> commandList;

    public WaiterRevoker() {
        commandList = new ArrayList<>();
    }

    /**
     * 记录客户下单的需求
     *
     * @param command
     */
    public void writeMenu(Command command) {
        commandList.add(command);
    }

    /**
     * 将菜单交给厨师
     */
    public void beginBarbecue() {
        if (commandList != null && commandList.size() > 0) {
            commandList.forEach(command -> command.execute());
        }
    }

    /**
     * 客户不吃了，给厨师说取消菜单上的烧烤
     */
    public void cancelBarbecue() {
        if (commandList != null && commandList.size() > 0) {
            commandList.forEach(command -> command.undo());
        }
    }

}
